/*
链接：https://ac.nowcoder.com/acm/contest/11217/B
来源：牛客网

dd在玩跳格子游戏，具体游戏规则如下，n个格子呈环形分布，顺时针方向分别标号为1∼n，其中
1和n相邻，每个格子上都有一个正整数a[i]，玩家可以选择一个点作为起点开始跳n下，第
i次跳跃，玩家只可以选择当前位置左边或右边最近且尚未被跳跃过的位置进行一次跳跃，并获得
i×a[p]的得分，其中p为第i次跳跃的位置。
dd很鸡贼，想赢又不想动脑子，她希望你能给她规划路线以确保她的胜利
*/
#include<bits/stdc++.h>
#define ll long long
#define int ll
#define endl "\n"
#define pii pair<int,int>
#define mii map<int,int>
#define umii unordered_map<int,int>
#define vec2(a) vector<vector<a>>
#define vec1(a) vector<a>
#define mp(a,b) make_pair(a,b)
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define i128 __int128
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

void init_inv(int size,int mod);
void init_fac(int size,int mod);
int fp(int a,int b,int mod);
int C(int m,int n,int mod);
int A(int m,int n,int mod);

vector<int> inv;
vector<int> factory;

void solve(){
    int n;
    cin>>n;
    vec1(int) a(4010);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        a[i+n]=a[i];
    }
    vec2(int) f(4010,vec1(int)(4010));
    for(int len=1;len<=n;len++){ //枚举区间长度
        for(int i=1;i<=2*n-len;i++){
            if(i==i+len-1){
                f[i][i]=a[i];
            }else{
                f[i][i+len-1]=f[i+1][i+len-1]+len*a[i];
                f[i][i+len-1]=max(f[i][i+len-1],f[i][i+len-2]+len*a[i+len-1]);
            }
        }
    }
    int res=0;
    for(int i=1;i<=n;i++){
        res=max(res,f[i][i+n-1]);
    }
    cout<<res<<endl;
}

signed main(){
    int t=1;
    while(t--){
        solve();
    }
}

int fp(int a,int b,int mod){
    if(b==0){
        return 1;
    }
    int ret=1;
    while(b){
        if(b&1){
            ret=ret*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return ret;
}
void init_fac(int size,int mod){
    factory.resize(size+10);
    factory[0]=1;
    for(int i=1;i<=size;i++){
        factory[i]=factory[i-1]*i%mod;
    }
}
void init_inv(int size,int mod){
    inv.resize(size+10);
    inv[1]=1;
    for(int i=2;i<=size;i++){
        inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    }
}
int C(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*((m-i+1)%mod)%mod*inv[i];
    }
    return ans;
}
int A(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*(m-i+1)%mod;
    }
    return ans;
}
